package com.junjiao.util.java.image;

import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.ServletActionContext;

/**
 * 文件上传util 支持任意文件的上传
 * 
 * @author jiaojun
 * @email eshore_jiaojun@163.com
 * @version 2.0 2010-6-13
 */
public class UploadFileUtil {

	private static Log log = LogFactory.getLog(UploadFileUtil.class);

	/**
	 * 上传图片
	 * 
	 * @param file
	 *            文件
	 * @param fileName
	 *            文件名
	 * @param savePath
	 *            保存文件的地址
	 * @return String 服务器上文件保存的地址
	 * @throws Exception
	 */
	public static String uploadPicutre(File file, String fileName,
			String savePath) throws Exception {
		try {
			log.debug("debug uploadBigImg");

			// 规范后的文件名
			String targetFileName = generateFileName(fileName);

			// 上传图片的服务器路径
			String targetDirectory = ServletActionContext.getRequest()
					.getRealPath(savePath);

			// 判断服务器保存文件的地址是否存在，不存在则创建
			if (null == savePath) {
				File paehDir = new File(targetDirectory);
				if (!paehDir.exists()) {
					paehDir.mkdirs();
				}
			}

			File target = new File(targetDirectory, targetFileName);
			FileUtils.copyFile(file, target);

			// 服务器上文件保存的地址
			return targetDirectory + targetFileName;
		} catch (Exception e) {
			log.error(e.getMessage());
		}
		return null;
	}

	/**
	 * 规范上传文件的文件名
	 * 
	 * @param fileName
	 * @return formatDate + random + extension
	 */
	private static String generateFileName(String fileName) {
		DateFormat format = new SimpleDateFormat("yyMMddHHmmss");
		String formatDate = format.format(new Date());

		int random = new Random().nextInt(10000);

		int position = fileName.lastIndexOf(".");
		String extension = fileName.substring(position);

		return formatDate + random + extension;
	}
}
